{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"TFLite-Week2-Notebook2.ipynb","version":"0.3.2","provenance":[],"collapsed_sections":[],"toc_visible":true},"kernelspec":{"name":"python3","display_name":"Python 3"},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"colab_type":"text","id":"oYM61xrTsP5d"},"source":["# Transfer Learning with TensorFlow Hub for TFLite"]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"bL54LWCHt5q5"},"source":["## Set up library versions for TF2"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"110fGB18UNJn","colab":{}},"source":["# !pip uninstall tensorflow --yes\n","!pip install -U --pre -q tensorflow-gpu==2.0.0-beta1\n","# !pip install -U --pre -q tf-nightly-gpu-2.0-preview==2.0.0.dev20190715\n","# Last tested version: 2.0.0-dev20190704"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Tw_-ZX_8tXkG","colab_type":"code","colab":{}},"source":["# !pip install -U --pre -q tf-estimator-nightly==1.14.0.dev2019071001"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"5MzNyBJVE_jQ","colab":{}},"source":["# !pip uninstall tensorflow-hub --yes\n","# !pip install -U --pre -q tf-hub-nightly==0.6.0.dev201907150002\n","# Last tested version: Hub version:  0.6.0.dev201907160002"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"dlauq-4FWGZM","outputId":"59690fa5-6c86-4278-cfae-2d9b02ec0762","colab":{"base_uri":"https://localhost:8080/","height":85},"executionInfo":{"status":"ok","timestamp":1564671989506,"user_tz":420,"elapsed":2152,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["from __future__ import absolute_import, division, print_function\n","\n","import os\n","\n","import matplotlib.pylab as plt\n","import numpy as np\n","\n","import tensorflow as tf\n","import tensorflow_hub as hub\n","\n","print(\"Version: \", tf.__version__)\n","print(\"Eager mode: \", tf.executing_eagerly())\n","print(\"Hub version: \", hub.__version__)\n","print(\"GPU is\", \"available\" if tf.test.is_gpu_available() else \"NOT AVAILABLE\")"],"execution_count":2,"outputs":[{"output_type":"stream","text":["Version:  2.0.0-beta1\n","Eager mode:  True\n","Hub version:  0.5.0\n","GPU is available\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"mmaHHH7Pvmth"},"source":["## Select the Hub/TF2 module to use\n","\n","Hub modules for TF 1.x won't work here, please use one of the selections provided."]},{"cell_type":"code","metadata":{"colab_type":"code","id":"FlsEcKVeuCnf","outputId":"879a75eb-21f4-4a2a-a13d-92ba06dd7adf","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1564672002614,"user_tz":420,"elapsed":598,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["module_selection = (\"mobilenet_v2\", 224, 1280) #@param [\"(\\\"mobilenet_v2\\\", 224, 1280)\", \"(\\\"inception_v3\\\", 299, 2048)\"] {type:\"raw\", allow-input: true}\n","handle_base, pixels, FV_SIZE = module_selection\n","MODULE_HANDLE =\"https://tfhub.dev/google/tf2-preview/{}/feature_vector/4\".format(handle_base)\n","IMAGE_SIZE = (pixels, pixels)\n","print(\"Using {} with input size {} and output dimension {}\".format(\n","  MODULE_HANDLE, IMAGE_SIZE, FV_SIZE))"],"execution_count":3,"outputs":[{"output_type":"stream","text":["Using https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4 with input size (224, 224) and output dimension 1280\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"sYUsgwCBv87A","colab_type":"text"},"source":["## Data preprocessing"]},{"cell_type":"markdown","metadata":{"id":"8nqVX3KYwGPh","colab_type":"text"},"source":["Use [TensorFlow Datasets](http://tensorflow.org/datasets) to load the cats and dogs dataset.\n","\n","This `tfds` package is the easiest way to load pre-defined data. If you have your own data, and are interested in importing using it with TensorFlow see [loading image data](../load_data/images.ipynb)\n"]},{"cell_type":"code","metadata":{"id":"jGvpkDj4wBup","colab_type":"code","colab":{}},"source":["import tensorflow_datasets as tfds\n","tfds.disable_progress_bar()"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"YkF4Boe5wN7N","colab_type":"text"},"source":["The `tfds.load` method downloads and caches the data, and returns a `tf.data.Dataset` object. These objects provide powerful, efficient methods for manipulating data and piping it into your model.\n","\n","Since `\"cats_vs_dog\"` doesn't define standard splits, use the subsplit feature to divide it into (train, validation, test) with 80%, 10%, 10% of the data respectively."]},{"cell_type":"code","metadata":{"id":"SQ9xK9F2wGD8","colab_type":"code","outputId":"17fb18c1-88f7-4a74-eb7f-2c71b11de07a","colab":{"base_uri":"https://localhost:8080/","height":207},"executionInfo":{"status":"ok","timestamp":1564672059300,"user_tz":420,"elapsed":38908,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["splits = tfds.Split.ALL.subsplit(weighted=(80, 10, 10))\n","\n","splits, info = tfds.load('cats_vs_dogs', with_info=True, as_supervised=True, split = splits)\n","\n","(train_examples, validation_examples, test_examples) = splits\n","\n","num_examples = info.splits['train'].num_examples\n","num_classes = info.features['label'].num_classes"],"execution_count":5,"outputs":[{"output_type":"stream","text":["\u001b[1mDownloading and preparing dataset cats_vs_dogs (786.68 MiB) to /root/tensorflow_datasets/cats_vs_dogs/2.0.1...\u001b[0m\n"],"name":"stdout"},{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/urllib3/connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings\n","  InsecureRequestWarning)\n","WARNING: Logging before flag parsing goes to stderr.\n","W0801 15:07:33.853774 140333521454976 cats_vs_dogs.py:117] 1738 images were corrupted and were skipped\n","W0801 15:07:33.864754 140333521454976 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow_datasets/core/file_format_adapter.py:209: tf_record_iterator (from tensorflow.python.lib.io.tf_record) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use eager execution and: \n","`tf.data.TFRecordDataset(path)`\n"],"name":"stderr"},{"output_type":"stream","text":["\u001b[1mDataset cats_vs_dogs downloaded and prepared to /root/tensorflow_datasets/cats_vs_dogs/2.0.1. Subsequent calls will reuse this data.\u001b[0m\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"pmXQYXNWwf19","colab_type":"text"},"source":["### Format the Data\n","\n","Use the `tf.image` module to format the images for the task.\n","\n","Resize the images to a fixes input size, and rescale the input channels"]},{"cell_type":"code","metadata":{"id":"y7UyXblSwkUS","colab_type":"code","colab":{}},"source":["def format_image(image, label):\n","  image = tf.image.resize(image, IMAGE_SIZE) / 255.0\n","  return  image, label"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1nrDR8CnwrVk","colab_type":"text"},"source":["Now shuffle and batch the data\n"]},{"cell_type":"code","metadata":{"id":"zAEUG7vawxLm","colab_type":"code","colab":{},"cellView":"form"},"source":["BATCH_SIZE = 32 #@param {type:\"integer\"}"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"fHEC9mbswxvM","colab_type":"code","colab":{}},"source":["train_batches = train_examples.shuffle(num_examples // 4).map(format_image).batch(BATCH_SIZE).prefetch(1)\n","validation_batches = validation_examples.map(format_image).batch(BATCH_SIZE).prefetch(1)\n","test_batches = test_examples.map(format_image).batch(1)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"ghQhZjgEw1cK","colab_type":"text"},"source":["Inspect a batch"]},{"cell_type":"code","metadata":{"id":"gz0xsMCjwx54","colab_type":"code","outputId":"f35f4ba2-44a6-4d00-bc35-8da0601b525c","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1564672112196,"user_tz":420,"elapsed":7983,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["for image_batch, label_batch in train_batches.take(1):\n","  pass\n","\n","image_batch.shape"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/plain":["TensorShape([32, 224, 224, 3])"]},"metadata":{"tags":[]},"execution_count":9}]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"FS_gVStowW3G"},"source":["\n","## Defining the model\n","\n","All it takes is to put a linear classifier on top of the `feature_extractor_layer` with the Hub module.\n","\n","For speed, we start out with a non-trainable `feature_extractor_layer`, but you can also enable fine-tuning for greater accuracy."]},{"cell_type":"code","metadata":{"colab_type":"code","id":"RaJW3XrPyFiF","colab":{}},"source":["do_fine_tuning = False #@param {type:\"boolean\"}"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"wd0KfstqaUmE","colab_type":"text"},"source":["Load TFHub Module"]},{"cell_type":"code","metadata":{"id":"svvDrt3WUrrm","colab_type":"code","colab":{}},"source":["feature_extractor = hub.KerasLayer(MODULE_HANDLE,\n","                                   input_shape=IMAGE_SIZE + (3,), \n","                                   output_shape=[FV_SIZE],\n","                                   trainable=do_fine_tuning)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"50FYNIb1dmJH","outputId":"ce9c8433-f67a-488d-f992-3ade7ed69a4d","colab":{"base_uri":"https://localhost:8080/","height":238},"executionInfo":{"status":"ok","timestamp":1564672144492,"user_tz":420,"elapsed":1688,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["print(\"Building model with\", MODULE_HANDLE)\n","model = tf.keras.Sequential([\n","    feature_extractor,\n","    tf.keras.layers.Dense(num_classes, activation='softmax')\n","])\n","model.summary()"],"execution_count":12,"outputs":[{"output_type":"stream","text":["Building model with https://tfhub.dev/google/tf2-preview/mobilenet_v2/feature_vector/4\n","Model: \"sequential\"\n","_________________________________________________________________\n","Layer (type)                 Output Shape              Param #   \n","=================================================================\n","keras_layer (KerasLayer)     (None, 1280)              2257984   \n","_________________________________________________________________\n","dense (Dense)                (None, 2)                 2562      \n","=================================================================\n","Total params: 2,260,546\n","Trainable params: 2,562\n","Non-trainable params: 2,257,984\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"1PzLoQK0Zadv","colab_type":"code","colab":{}},"source":["#@title (Optional) Unfreeze some layers\n","NUM_LAYERS = 10 #@param {type:\"slider\", min:1, max:50, step:1}\n","      \n","if do_fine_tuning:\n","  feature_extractor.trainable = True\n","  \n","  for layer in model.layers[-NUM_LAYERS:]:\n","    layer.trainable = True\n","\n","else:\n","  feature_extractor.trainable = False"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"colab_type":"text","id":"u2e5WupIw2N2"},"source":["## Training the model"]},{"cell_type":"code","metadata":{"colab_type":"code","id":"9f3yBUvkd_VJ","colab":{}},"source":["if do_fine_tuning:\n","  model.compile(\n","    optimizer=tf.keras.optimizers.SGD(lr=0.002, momentum=0.9), \n","    loss=tf.keras.losses.SparseCategoricalCrossentropy(),\n","    metrics=['accuracy'])\n","else:\n","  model.compile(\n","    optimizer='adam', \n","    loss='sparse_categorical_crossentropy',\n","    metrics=['accuracy'])"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"colab_type":"code","id":"w_YKX2Qnfg6x","colab":{"base_uri":"https://localhost:8080/","height":258},"outputId":"a0c0b767-3398-452c-d346-292e79525a80","executionInfo":{"status":"ok","timestamp":1564672501887,"user_tz":420,"elapsed":332429,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["EPOCHS = 5\n","hist = model.fit(train_batches,\n","                    epochs=EPOCHS,\n","                    validation_data=validation_batches)"],"execution_count":15,"outputs":[{"output_type":"stream","text":["Epoch 1/5\n"],"name":"stdout"},{"output_type":"stream","text":["W0801 15:09:35.757656 140333521454976 deprecation.py:323] From /usr/local/lib/python3.6/dist-packages/tensorflow/python/ops/math_grad.py:1250: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","Use tf.where in 2.0, which has the same broadcast rule as np.where\n"],"name":"stderr"},{"output_type":"stream","text":["582/582 [==============================] - 71s 121ms/step - loss: 0.0557 - accuracy: 0.9813 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00\n","Epoch 2/5\n","582/582 [==============================] - 66s 113ms/step - loss: 0.0304 - accuracy: 0.9904 - val_loss: 0.0354 - val_accuracy: 0.9884\n","Epoch 3/5\n","582/582 [==============================] - 65s 112ms/step - loss: 0.0253 - accuracy: 0.9926 - val_loss: 0.0364 - val_accuracy: 0.9871\n","Epoch 4/5\n","582/582 [==============================] - 65s 112ms/step - loss: 0.0219 - accuracy: 0.9936 - val_loss: 0.0370 - val_accuracy: 0.9879\n","Epoch 5/5\n","582/582 [==============================] - 65s 111ms/step - loss: 0.0193 - accuracy: 0.9945 - val_loss: 0.0375 - val_accuracy: 0.9884\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"u_psFoTeLpHU","colab_type":"text"},"source":["## Export the model"]},{"cell_type":"code","metadata":{"id":"XaSb5nVzHcVv","colab_type":"code","colab":{}},"source":["CATS_VS_DOGS_SAVED_MODEL = \"exp_saved_model\""],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"fZqRAg1uz1Nu","colab_type":"text"},"source":["Export the SavedModel"]},{"cell_type":"code","metadata":{"id":"yJMue5YgnwtN","colab_type":"code","colab":{}},"source":["tf.saved_model.save(model, CATS_VS_DOGS_SAVED_MODEL)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"SOQF4cOan0SY","colab_type":"code","outputId":"06bcb028-3f27-478a-c557-abaf508867ef","colab":{"base_uri":"https://localhost:8080/","height":204},"executionInfo":{"status":"ok","timestamp":1564672524029,"user_tz":420,"elapsed":3472,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["%%bash -s $CATS_VS_DOGS_SAVED_MODEL\n","saved_model_cli show --dir $1 --tag_set serve --signature_def serving_default"],"execution_count":18,"outputs":[{"output_type":"stream","text":["The given SavedModel SignatureDef contains the following input(s):\n","  inputs['keras_layer_input'] tensor_info:\n","      dtype: DT_FLOAT\n","      shape: (-1, 224, 224, 3)\n","      name: serving_default_keras_layer_input:0\n","The given SavedModel SignatureDef contains the following output(s):\n","  outputs['dense'] tensor_info:\n","      dtype: DT_FLOAT\n","      shape: (-1, 2)\n","      name: StatefulPartitionedCall:0\n","Method name is: tensorflow/serving/predict\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"FY7QGBgBytwX","colab_type":"code","colab":{}},"source":["loaded = tf.saved_model.load(CATS_VS_DOGS_SAVED_MODEL)"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"tIhPyMISz952","colab_type":"code","outputId":"0822c9aa-1bf2-4571-e8d6-b6a1240cb4c7","colab":{"base_uri":"https://localhost:8080/","height":68},"executionInfo":{"status":"ok","timestamp":1564672546969,"user_tz":420,"elapsed":628,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["print(list(loaded.signatures.keys()))\n","infer = loaded.signatures[\"serving_default\"]\n","print(infer.structured_input_signature)\n","print(infer.structured_outputs)"],"execution_count":20,"outputs":[{"output_type":"stream","text":["['serving_default']\n","((), {'keras_layer_input': TensorSpec(shape=(None, 224, 224, 3), dtype=tf.float32, name='keras_layer_input')})\n","{'dense': TensorSpec(shape=(None, 2), dtype=tf.float32, name='dense')}\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"XxLiLC8n0H16","colab_type":"text"},"source":["## Convert using TFLite's Converter"]},{"cell_type":"code","metadata":{"id":"1mFT-Fh0wGxe","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"1aUYvCpfWmrQ","colab_type":"text"},"source":["Load the TFLiteConverter with the SavedModel"]},{"cell_type":"code","metadata":{"id":"dqJRyIg8Wl1n","colab_type":"code","colab":{}},"source":["converter = tf.lite.TFLiteConverter.from_saved_model(CATS_VS_DOGS_SAVED_MODEL)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"AudcNjT0UtfF","colab_type":"text"},"source":["### Post-training quantization\n","The simplest form of post-training quantization quantizes weights from floating point to 8-bits of precision. This technique is enabled as an option in the TensorFlow Lite converter. At inference, weights are converted from 8-bits of precision to floating point and computed using floating-point kernels. This conversion is done once and cached to reduce latency.\n","\n","To further improve latency, hybrid operators dynamically quantize activations to 8-bits and perform computations with 8-bit weights and activations. This optimization provides latencies close to fully fixed-point inference. However, the outputs are still stored using floating point, so that the speedup with hybrid ops is less than a full fixed-point computation."]},{"cell_type":"code","metadata":{"id":"WmSr2-yZoUhz","colab_type":"code","colab":{}},"source":["converter.optimizations = [tf.lite.Optimize.DEFAULT]"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"YpCijI08UxP0","colab_type":"text"},"source":["### Post-training integer quantization\n","We can get further latency improvements, reductions in peak memory usage, and access to integer only hardware accelerators by making sure all model math is quantized. To do this, we need to measure the dynamic range of activations and inputs with a representative data set. You can simply create an input data generator and provide it to our converter."]},{"cell_type":"code","metadata":{"id":"clM_dTIkWdIa","colab_type":"code","colab":{}},"source":["def representative_data_gen():\n","  for input_value, _ in test_batches.take(100):\n","    yield [input_value]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"0oPkAxDvUias","colab_type":"code","colab":{}},"source":["converter.representative_dataset = representative_data_gen"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"IGUAVTqXVfnu","colab_type":"text"},"source":["The resulting model will be fully quantized but still take float input and output for convenience.\n","\n","Ops that do not have quantized implementations will automatically be left in floating point. This allows conversion to occur smoothly but may restrict deployment to accelerators that support float. "]},{"cell_type":"markdown","metadata":{"id":"cPVdjaEJVkHy","colab_type":"text"},"source":["### Full integer quantization\n","\n","To require the converter to only output integer operations, one can specify:"]},{"cell_type":"code","metadata":{"id":"eQi1aO2cVhoL","colab_type":"code","colab":{}},"source":["converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"snwssESbVtFw","colab_type":"text"},"source":["### Finally convert the model"]},{"cell_type":"code","metadata":{"id":"tUEgr46WVsqd","colab_type":"code","colab":{}},"source":["tflite_model = converter.convert()\n","tflite_model_file = 'converted_model.tflite'\n","\n","with open(tflite_model_file, \"wb\") as f:\n","  f.write(tflite_model)"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"BbTF6nd1KG2o","colab_type":"text"},"source":["##Test the TFLite model using the Python Interpreter"]},{"cell_type":"code","metadata":{"id":"dg2NkVTmLUdJ","colab_type":"code","colab":{}},"source":["# Load TFLite model and allocate tensors.\n","  \n","interpreter = tf.lite.Interpreter(model_path=tflite_model_file)\n","interpreter.allocate_tensors()\n","\n","input_index = interpreter.get_input_details()[0][\"index\"]\n","output_index = interpreter.get_output_details()[0][\"index\"]"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"snJQVs9JNglv","colab_type":"code","outputId":"4f4c6631-a922-4265-92a4-3f2c3e739c15","colab":{"base_uri":"https://localhost:8080/","height":34},"executionInfo":{"status":"ok","timestamp":1564674697215,"user_tz":420,"elapsed":18058,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["from tqdm import tqdm\n","\n","# Gather results for the randomly sampled test images\n","predictions = []\n","\n","test_labels, test_imgs = [], []\n","for img, label in tqdm(test_batches.take(10)):\n","  interpreter.set_tensor(input_index, img)\n","  interpreter.invoke()\n","  predictions.append(interpreter.get_tensor(output_index))\n","  \n","  test_labels.append(label.numpy()[0])\n","  test_imgs.append(img)"],"execution_count":28,"outputs":[{"output_type":"stream","text":["10it [00:17,  1.72s/it]\n"],"name":"stderr"}]},{"cell_type":"code","metadata":{"id":"YMTWNqPpNiAI","colab_type":"code","cellView":"both","colab":{}},"source":["#@title Utility functions for plotting\n","# Utilities for plotting\n","\n","class_names = ['cat', 'dog']\n","\n","def plot_image(i, predictions_array, true_label, img):\n","  predictions_array, true_label, img = predictions_array[i], true_label[i], img[i]\n","  plt.grid(False)\n","  plt.xticks([])\n","  plt.yticks([])\n","    \n","  img = np.squeeze(img)\n","\n","  plt.imshow(img, cmap=plt.cm.binary)\n","\n","  predicted_label = np.argmax(predictions_array)\n","  if predicted_label == true_label:\n","    color = 'green'\n","  else:\n","    color = 'red'\n","  \n","  plt.xlabel(\"{} {:2.0f}% ({})\".format(class_names[predicted_label],\n","                                100*np.max(predictions_array),\n","                                class_names[true_label]),\n","                                color=color)\n","\n"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"fK_CTyL3XQt1","colab_type":"text"},"source":["NOTE: Colab runs on server CPUs. At the time of writing this, TensorFlow Lite doesn't have super optimized server CPU kernels. For this reason post-training full-integer quantized models  may be slower here than the other kinds of optimized models. But for mobile CPUs, considerable speedup can be observed."]},{"cell_type":"code","metadata":{"id":"1-lbnicPNkZs","colab_type":"code","cellView":"both","outputId":"73203304-326b-485b-81bc-76f20c4c2de2","colab":{"base_uri":"https://localhost:8080/","height":201},"executionInfo":{"status":"ok","timestamp":1564674734671,"user_tz":420,"elapsed":963,"user":{"displayName":"Laurence Moroney","photoUrl":"https://lh4.googleusercontent.com/-wUzpekukCVw/AAAAAAAAAAI/AAAAAAAAAHw/pQPstOOJqqE/s64/photo.jpg","userId":"17858265307580721507"}}},"source":["#@title Visualize the outputs { run: \"auto\" }\n","index = 1 #@param {type:\"slider\", min:0, max:9, step:1}\n","plt.figure(figsize=(6,3))\n","plt.subplot(1,2,1)\n","plot_image(index, predictions, test_labels, test_imgs)\n","plt.show()"],"execution_count":35,"outputs":[{"output_type":"display_data","data":{"image/png":"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\nAAAASUVORK5CYII=\n","text/plain":["<Figure size 432x216 with 1 Axes>"]},"metadata":{"tags":[]}}]},{"cell_type":"markdown","metadata":{"id":"PmZRieHmKLY5","colab_type":"text"},"source":["Download the model"]},{"cell_type":"code","metadata":{"id":"0jJAxrQB2VFw","colab_type":"code","colab":{}},"source":["from google.colab import files\n","\n","files.download('converted_model.tflite')\n","\n","labels = ['cat', 'dog']\n","\n","with open('labels.txt', 'w') as f:\n","  f.write('\\n'.join(labels))\n","  \n","files.download('labels.txt')"],"execution_count":0,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"BDlmpjC6VnFZ","colab_type":"text"},"source":["# Prepare the test images for download (Optional)"]},{"cell_type":"markdown","metadata":{"id":"_1ja_WA0WZOH","colab_type":"text"},"source":["This part involves downloading additional test images for the Mobile Apps only in case you need to try out more samples"]},{"cell_type":"code","metadata":{"id":"fzLKEBrfTREA","colab_type":"code","colab":{}},"source":["!mkdir -p test_images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Qn7ukNQCSewb","colab_type":"code","colab":{}},"source":["from PIL import Image\n","\n","for index, (image, label) in enumerate(test_batches.take(50)):\n","  image = tf.cast(image * 255.0, tf.uint8)\n","  image = tf.squeeze(image).numpy()\n","  pil_image = Image.fromarray(image)\n","  pil_image.save('test_images/{}_{}.jpg'.format(class_names[label[0]], index))"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"xVKKWUG8UMO5","colab_type":"code","colab":{}},"source":["!ls test_images"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"l_w_-UdlS9Vi","colab_type":"code","colab":{}},"source":["!zip -qq cats_vs_dogs_test_images.zip -r test_images/"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"Giva6EHwWm6Y","colab_type":"code","colab":{}},"source":["files.download('cats_vs_dogs_test_images.zip')"],"execution_count":0,"outputs":[]},{"cell_type":"code","metadata":{"id":"L_qI1_8HgxYW","colab_type":"code","colab":{}},"source":[""],"execution_count":0,"outputs":[]}]}